//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#ifndef __SmileStruct_h__
#define __SmileStruct_h__
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#include "libraries.h"
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
  class SmileStruct {

    private:

      String*          code;
      String*          id;
      String*          info;
      
      TListE <String>* lingos;

    protected:

      void              CopyLingo(char*, int, int);
      double            ObtainLingoSim(char*, char*);
      double            ObtainLingoSimWithoutNumber(char*, char*);

    public:

      SmileStruct();
      SmileStruct(const char*, const char*);
      SmileStruct(String*, String*);
      SmileStruct(const SmileStruct&);
      SmileStruct(SmileStruct*);

      ~SmileStruct();

      void              Code(char*);
      void              Code(String*);
      void              Id(char*);
      void              Id(String*);
      void              Info(char*);
      void              Info(String*);
      void              Lingos(TListE <String>*);

      char*             Code();
      char*             Id();
      char*             Info();
      char*             OutToSmileString();
      char*             OutToSmileStringWithInfo();
      TListE <String>*  Lingos();

      void              InputLine(String);
      void              InputLine(char*);
      int               ObtainLingos(void);
      int               ObtainLingosWithoutNumber(void);

      double            ComputeLingoSimilarity(SmileStruct&);                             //Using the integral Tanimoto coefficient
      double            ComputeLingoSimilarity(SmileStruct*);                             //Using the integral Tanimoto coefficient
      double            ComputeLingoSimilarityWithoutNumber(SmileStruct&);                //Using the integral Tanimoto coefficient
      double            ComputeLingoSimilarityWithoutNumber(SmileStruct*);                //Using the integral Tanimoto coefficient
      
      friend double     ComputeLingoSimilarity(SmileStruct&, SmileStruct&);               //Using the integral Tanimoto coefficient
      friend double     ComputeLingoSimilarity(SmileStruct*, SmileStruct*);               //Using the integral Tanimoto coefficient
      friend double     ComputeLingoSimilarityWithoutNumber(SmileStruct&, SmileStruct&);  //Using the integral Tanimoto coefficient
      friend double     ComputeLingoSimilarityWithoutNumber(SmileStruct*, SmileStruct*);  //Using the integral Tanimoto coefficient

      SmileStruct       operator=(const SmileStruct&);
      bool              operator==(const SmileStruct&);
      bool              operator!=(const SmileStruct&);

};
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#endif
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
